//获取表格的列 筛选项的列 详情的列
//表格头: list:1
//字段设置：所有的数据展示，但是只有list为1的是选中的
//conditionFlag: 0/1 1:筛选使用(todo:0未使用到)
//searchFormType: 筛选框展示的类型 select/text/date (todo：默认是text)
//relSearchFlag:（前提searchFormType：select）
//               false 不是关联模糊搜素  可以通过batchGetSearchConditionValueApi直接获取他的下拉数据(初始化界面的时候已经拿到下拉数据)
//               true  是关联模糊搜素    通过getSearchConditionValue这个接口（focus和filter-method)模糊获取数据（触焦和输入值的时候 模糊搜索）
export default class ConfigCondition {
  constructor(options) {
    this.options = options;
    let { data, exclude } = options;
    this.data = data;
    this.exclude = exclude || []; //表格头不展示的字段列
    this.tableCol = []; //表格头
    this.filterCol = []; //筛选
    this.init();
  }
  init() {
    this.data?.forEach((item) => {
      if (["text", "textarea", "select"].includes(item.columnType)) {
        item = {
          ...item,
          label: item.comment,
          prop: item.property,
          type: item.columnType,
          width: "250px",
          autosize: { minRows: 2, maxRows: 6 },
        };
      } else {
        item = { ...item, label: item.comment, prop: item.property };
      }

      item.conditionFlag === "1" && this.filterCol.push(item);
      this.initTableCol(item); //根据字段设置展示表头 list：1默认展示 list :0 默认不展示
    });
  }
  //  {
  //   type: {
  //     slot: [], //插槽
  //     text: {
  //       props: [],
  //       options: {}, //... el-input其他属性
  //     },
  //     textarea: {
  //       props: [],
  //       options: {}, //... el-input其他属性
  //     },
  //     formatters: [
  //       {
  //         prop: "", //字段名
  //         formatter: (row, column, cellValue, index) => {},
  //         ...el-tabel  Table-column Attributes (参数type除外)
  //       },
  //     ],
  //   },
  // };
  initTableCol(item) {
    let type = this.options.type || {};
    if (!this.exclude.includes(item.prop)) {
      if (type?.slot?.includes(item.prop)) {
        //插槽
        item = { type: "slot", ...item };
      } else if (type?.textarea?.props?.includes(item.prop)) {
        //el-input textarea类型
        item = {
          type: "textarea",
          width: "250px",
          autosize: { minRows: 2, maxRows: 6 },
          ...type.textarea.options,
          ...item,
        };
      } else if (type?.text?.props?.includes(item.prop)) {
        //el-input text类型
        item = { type: "text", width: "250px", ...item, ...type.text.options };
      }
      //用来格式化内容
      if (type?.formatters) {
        let formatterCol = type.formatters.find((col) => col.prop === item.prop);
        if (formatterCol) {
          item = { ...item, ...formatterCol };
        }
      }
      this.tableCol.push(item);
    }
  }
}
